import diff from "./diff";

export default class Component {
  constructor(props) {
    this.props = props;
  }
  componentWillMount() { }
  componentDidMount() { }
  componentWillReceiveProps(nextProps) { }
  shouldComponentUpdate(nextProps, nextState) {
    return nextProps != this.props || nextState != this.state;
  }
  componentWillUpdate(nextProps, nextState) { }
  componentDidUpdate(nextProps, nextState) { }
  componentWillUnmount() { }

  setState(state) {
    // 注意 这个方法内部的this取决于谁调用了这个方法
    // 比如 Abc 组件中调用了 this.setState({}); 
    // 那么当前这个方法里的 this 就是指向 Abc 实例本身；
    this.state = Object.assign({}, this.state, state);
    // 新的 vDOM
    const vDom = this.render();
    // 获取旧的 vDOM
    let oldDom = this.getDom();
    // 对比新旧节点 更新视图
    diff(vDom, oldDom.parentNode, oldDom);
  }

  setDom(dom) {
    this._dom = dom;
  }

  getDom() {
    return this._dom;
  }

  updateProps(props) {
    this.props = props;
  }
}
